// 没用var  let 声明的为全局对象(变量)
// 可以读取函数内部的变量，让这些变量的值始终保持在内存中。
// function f1() {
//   var n = 999;
//   nAdd = function () {
//     n += 1
//   }

//   function f2() {
//     console.log(n);
//   }
//   return f2;
// }
// var result = f1();
// result(); // 999
// nAdd();
// result(); // 1000

// // The window
// var name = "The Window";
// var object = {
//   name: "My Object",
//   getNameFunc: function () {
//     return function () {
//       return this.name;
//     };
//   }
// };
// console.log(this == global)
// console.log(object.getNameFunc()());

// // My Object
// var name = "The Window";
// var object = {
//   name: "My Object",
//   getNameFunc: function () {
//     var that = this;
//     return function () {
//       return that.name;
//     };
//   },
// };
// console.log(object.getNameFunc()());

// 闭包应用
// function sayHi() {
//   console.log('hi')
// }
// function threeTimes(fn) {
//   let times = 0
//   return () => {
//     if (times++ < 3) {
//       fn()
//     }
//   }
// }

// const newFn = threeTimes(sayHi)
// newFn()
// threeTimes(sayHi)
// newFn()
// newFn()
// newFn()
// newFn() // 后面两次执行都无任何反应

// 实现add函数,让add(a)(b)和add(a,b)两种调用结果相同
// function add(a, b) {
//   if (b === undefined) {
//     return function (x) {
//       return a + x
//     }
//   }
//   return a + b
// }
// console.log(add(1, 2) == add(1)(2))

